package eSchool.BL;

import eSchool.DataLayer.DAOFactory;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
import eSchool.DataLayer.IFuncionarioDAO;
// #[regen=yes,id=DCE.9402A008-8D7F-026B-0370-2BCDDAFDDF1E]
import eSchool.Utils.TextHelper;
// </editor-fold> 
public class Funcionario extends EntidadeBase {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.1CE4CC29-9213-789D-AA9B-4B48E4092A4A]
    // </editor-fold> 
    private int idFuncionario;
    private String utilizador;
    private String password;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.974D4A08-5AD8-CC16-0930-ED33647763F5]
    // </editor-fold> 
    public Funcionario() {
        idFuncionario = 0;
        morada = TextHelper.EmptyString;
        codPostal = TextHelper.EmptyString;
        localidade = TextHelper.EmptyString;
        sexo = TextHelper.EmptyString;
        email = TextHelper.EmptyString;
        telefone = TextHelper.EmptyString;
        obs = TextHelper.EmptyString;
        nome = TextHelper.EmptyString;
        utilizador = TextHelper.EmptyString;
        password = TextHelper.EmptyString;
    }
    
    public Funcionario(int idFuncionario) throws Exception {
        this.leDados(idFuncionario);
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.ACB37247-B876-966B-A909-C0A7A095709D]
    // </editor-fold> 
    public int getIdFuncionario() {
        return idFuncionario;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.13C326E9-46DB-34C4-A0ED-3C361747B6D0]
    // </editor-fold> 
    public void setIdFuncionario(int val) {
        this.idFuncionario = val;
    }

    @Override
    public void gravaDados() throws Exception {
        DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.ACCESS);
        IFuncionarioDAO funcionarioDAO = factory.getFuncionarioDAO();
        if(funcionarioDAO.findFuncionario(this.idFuncionario)== null)
            funcionarioDAO.insertFuncionario(this);
        else
            funcionarioDAO.updateFuncionario(this);
            
    }

    @Override
    public void leDados() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public void leDados(int idFuncionario) throws Exception {
        DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.ACCESS);
        IFuncionarioDAO funcionarioDAO = factory.getFuncionarioDAO();
        funcionarioDAO.findFuncionario(this, idFuncionario);
    }

    public String getUtilizador() {
        return utilizador;
    }

    public void setUtilizador(String utilizador) {
        this.utilizador = utilizador;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return ((Integer)idFuncionario);
            case 1:
                return morada;
            case 2:
                return codPostal;
            case 3:
                return localidade;
            case 4:
                return sexo;
            case 5:
                return email;
            case 6:
                return telefone;
            case 7:
                return obs;
            case 8:
                return nome;
            case 9:
                return utilizador;
            case 10:
                return password;
            default:
                return null;
       }
    }
    
    public int getColumnCount() {
        return 11;
    }

    public String getColumnName(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return "idFuncionario";
            case 1:
                return "morada";
            case 2:
                return "codPostal";
            case 3:
                return "localidade";
            case 4:
                return "sexo";
            case 5:
                return "email";
            case 6:
                return "telefone";
            case 7:
                return "obs";
            case 8:
                return "nome";
            case 9:
                return "utilizador";    
            case 10:
                return "password";  
            default:
                return null;
       }
    }

    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return ((Integer)idFuncionario).getClass();
            case 1:
                return morada.getClass();
            case 2:
                return codPostal.getClass();
            case 3:
                return localidade.getClass();
            case 4:
                return sexo.getClass();
            case 5:
                return email.getClass();
            case 6:
                return telefone.getClass();
            case 7:
                return obs.getClass();
            case 8:
                return nome.getClass();
            case 9:
                return utilizador.getClass();
            case 10:
                return password.getClass();
            default:
                return null;
       }

    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

   
    public void setValueAt(Object aValue, int rowIndex, int columnIndex){
        
       switch (columnIndex) {
            case 0:
                idFuncionario = Integer.parseInt(TextHelper.toString(aValue));
                break;
            case 1:
                morada = String.valueOf(aValue);
                break;
            case 2:
                codPostal = String.valueOf(aValue);
                break;
            case 3:
                localidade = String.valueOf(aValue);
                break;
            case 4:
                sexo = String.valueOf(aValue);
                break;
            case 5:
                email = String.valueOf(aValue);
                break;
            case 6:
                telefone = String.valueOf(aValue);
                break;
            case 7:
                obs = String.valueOf(aValue);
                break;
            case 8:
                nome = String.valueOf(aValue);
                break;
           case 9:
                utilizador = String.valueOf(aValue);
                break;
           case 10:
                password = String.valueOf(aValue);
                break;
        }
    }
}
